struct buf {
  int flags;     // 标志位  是否读取位
  uint dev;      //设备号
  uint blockno;   //块号
  struct sleeplock lock; 
  uint refcnt;       // 引用次数
  struct buf *prev; // LRU cache list
  struct buf *next;
  struct buf *qnext; // disk queue   Xv6会维护一个进程请求磁盘操作的队列  这个还不太明白？？？
  uchar data[BSIZE];  // 磁盘上未使用块的信息储存，对应bitmap
};

#define B_VALID 0x2  // 从磁盘上读取 buffer has been read from disk
#define B_DIRTY 0x4  // 写入磁盘    buffer needs to be written to disk
